package com.tang.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Admin {

    private int cursorIdx = 0;
    private final List<ConfigMemento> mementoList = new ArrayList<>();
    private final Map<String, ConfigMemento> mementoMap = new HashMap<>();

    /**
     * 记录修改
     *
     * @param configMemento 记录
     */
    public void append(ConfigMemento configMemento) {
        mementoList.add(configMemento);
        mementoMap.put(configMemento.getConfigFile().getVersionNo(), configMemento);
        cursorIdx++;
    }

    /**
     * 回滚方法
     *
     * @return 记录
     */
    public ConfigMemento undo() {
        if (--cursorIdx <= 0) return mementoList.get(0);
        return mementoList.get(cursorIdx);
    }

    /**
     * 前进
     *
     * @return 记录
     */
    public ConfigMemento redo() {
        int size = mementoList.size();
        if (++cursorIdx > size) return mementoList.get(size - 1);
        return mementoList.get(cursorIdx);
    }

    /**
     * 获取指定版本
     *
     * @param versionNo 版本号
     * @return 记录
     */
    public ConfigMemento get(String versionNo) {
        return mementoMap.get(versionNo);
    }


}
